<?php
/**
 * Created by PhpStorm.
 * User: DaibiDaddy
 * Date: 2016/5/26
 * Time: 14:40
 * the honor is nb_yang
 */

namespace App\Controller\Common;

use App\Base\BaseConfig;
use App\Base\BaseController;
use App\BaseExt\OSS\Upload;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;

class NbUploadController extends BaseController{

    /**
     * @route("/nbupload/kind_upload",name="kindUpload")
     * @param Request $request
     * @return Response json string
     */
    public function kind_upload(Request $request){
        //KindEditor上传端
        //KE文件name=imgFile
        if (!$nbdir = $this->getParamRequired("nbdir")) {exit('Error');}
        if (!$max_height = $this->getParamRequired("max_height")) {$max_height = 0;}
        if (!$max_wight = $this->getParamRequired("msx_wight")) {$max_wight = 0;}
        if(isset($_FILES['imgFile'])) {
            if ($_FILES['imgFile']['error']!==4 && isset($_FILES['imgFile']['error'])) {


                $file = $request->files->get("Filedata");
                $fileOrgName = $_FILES['Filedata']["name"];
                $arr = mbsplit("\.",$fileOrgName);
                $suffix = $arr[count($arr) -1];
                //$fileName = md5(uniqid()).'.'.$file->guessExtension();
                $fileName = md5(uniqid()).'.'.$suffix;
                $absPath = './uploads/'.$nbdir.'/'.date("Ymd");
                if (BaseConfig::__OSS_OPEN__ == 1) {

                    //上传到OSS
                    $up = new Upload();
                    $dir = "qz";
                    $up->doUpload($_FILES["Filedata"]["tmp_name"],$fileName,$dir);
                    $filePath = "/$dir/".$fileName;
                    $json_data['status']=1;
                    $json_data['thumb']=$filePath;
                    $json_data['path']=$filePath;
                }else{


                    if ($file->move($absPath, $fileName)) {
                        $filePath = "/uploads/".$nbdir."/".date("Ymd")."/".$fileName;
                        $realPath = $absPath."/".$fileName;
                        $info = getimagesize($realPath);
                        $image_width = $info[0];
                        $image_height = $info[1];
                        if ($max_height!=0 || $max_wight!=0) {
                            if ($image_height > $max_height) {
                                unlink($realPath);
                                $json_data=array(
                                    'status'=>0,
                                    'msg'=>'图片过大,高度不可超过'.$max_height.'像素!',
                                );
                            }elseif($image_width > $max_wight){
                                unlink($realPath);
                                $json_data=array(
                                    'status'=>0,
                                    'msg'=>'图片过大,宽度不可超过'.$max_wight.'像素!',
                                );
                            }else{
                                $json_data['status']=1;
                                $json_data['thumb']=$filePath;
                                $json_data['path']=$filePath;
                            }
                        }else{
                            $json_data['status']=1;
                            $json_data['thumb']=$filePath;
                            $json_data['path']=$filePath;
                        }

                    }else{
                        $json_data=array(
                            'status'=>0,
                            'msg'=>"系统错误",
                        );
                    }
                }


//                $file = $request->files->get("imgFile");
//                $fileName = md5(uniqid()).'.'.$file->guessExtension();
//                $absPath = './uploads/'.$nbdir.'/'.date("Ymd");
//                if ($file->move($absPath, $fileName)) {
//                    $filePath = "/uploads/".$nbdir."/".date("Ymd")."/".$fileName;
//                    $realPath = $absPath."/".$fileName;
//                    $info = getimagesize($realPath);
//                    $image_width = $info[0];
//                    $image_height = $info[1];
//                    if ($max_height!=0 || $max_wight!=0) {
//                        if ($image_height > $max_height) {
//                            unlink($realPath);
//                            $json_data=array(
//                                'error'=>1,
//                                'message'=>'图片过大,高度不可超过'.$max_height.'像素!',
//                            );
//                        }elseif($image_width > $max_wight){
//                            unlink($realPath);
//                            $json_data=array(
//                                'error'=>1,
//                                'message'=>'图片过大,宽度不可超过'.$max_wight.'像素!',
//                            );
//                        }else{
//                            $json_data['error']=0;
//                            $json_data['url']=$filePath;
//                        }
//                    }else{
//                        $json_data['error']=0;
//                        $json_data['url']=$filePath;
//                    }
//
//                }else{
//                    $json_data=array(
//                        'error'=>1,
//                        'message'=>"系统错误",
//                    );
//                }
            }else{
                $json_data=array(
                    'error'=>1,
                    'message'=>'未选择图片!',
                );
            }
        }else{
            $json_data=array(
                'error'=>1,
                'message'=>'未选择图片!',
            );
        }

        return $this->json_res($json_data);
    }

    /**
     * @route("/nbupload/swf_upload",name="swfUpload")
     * @param Request $request
     * @return Response json string
     */
    public function swf_upload(Request $request){





        //SWFupload上传端
        //SU文件name=Filedata
        if (!$nbdir = $this->getParamRequired("nbdir")) {exit('Error');}
        if (!$max_height = $this->getParamRequired("max_height")) {$max_height = 0;}
        if (!$max_wight = $this->getParamRequired("msx_wight")) {$max_wight = 0;}
        if(isset($_FILES['Filedata'])) {
            if ($_FILES['Filedata']['error']!==4 && isset($_FILES['Filedata']['error'])) {



                $file = $request->files->get("Filedata");
                $fileOrgName = $_FILES['Filedata']["name"];
                $arr = mbsplit("\.",$fileOrgName);
                $suffix = $arr[count($arr) -1];
                //$fileName = md5(uniqid()).'.'.$file->guessExtension();
                $fileName = md5(uniqid()).'.'.$suffix;
                $absPath = './uploads/'.$nbdir.'/'.date("Ymd");
                if (BaseConfig::__OSS_OPEN__ == 1) {

                    //上传到OSS
                    $up = new Upload();
                    $dir = "qz";
                    $up->doUpload($_FILES["Filedata"]["tmp_name"],$fileName,$dir);
                    $filePath = "/$dir/".$fileName;
                    $json_data['status']=1;
                    $json_data['thumb']=$filePath;
                    $json_data['path']=$filePath;
                }else{
                    if ($file->move($absPath, $fileName)) {
                        $filePath = "/uploads/".$nbdir."/".date("Ymd")."/".$fileName;
                        $realPath = $absPath."/".$fileName;
                        $info = getimagesize($realPath);
                        $image_width = $info[0];
                        $image_height = $info[1];
                        if ($max_height!=0 || $max_wight!=0) {
                            if ($image_height > $max_height) {
                                unlink($realPath);
                                $json_data=array(
                                    'status'=>0,
                                    'msg'=>'图片过大,高度不可超过'.$max_height.'像素!',
                                );
                            }elseif($image_width > $max_wight){
                                unlink($realPath);
                                $json_data=array(
                                    'status'=>0,
                                    'msg'=>'图片过大,宽度不可超过'.$max_wight.'像素!',
                                );
                            }else{
                                $json_data['status']=1;
                                $json_data['thumb']=$filePath;
                                $json_data['path']=$filePath;
                            }
                        }else{
                            $json_data['status']=1;
                            $json_data['thumb']=$filePath;
                            $json_data['path']=$filePath;
                        }

                    }else{
                        $json_data=array(
                            'status'=>0,
                            'msg'=>"系统错误",
                        );
                    }
                }




            }else{
                $json_data=array(
                    'status'=>0,
                    'msg'=>'未选择图片!',
                );
            }
        }else{
            $json_data=array(
                'status'=>0,
                'msg'=>'未选择图片!',
            );
        }

        return $this->json_res($json_data);
    }

    /**
     * @route("/nbupload/kind_manager",name="kindManager")
     * @param Request $request
     * @return Response json string
     */
    public function kind_manager(Request $request){

        if (!$nbdir = $this->getParamRequired("nbdir")) {exit('Error');}
//                $file_patch=$this->config->item('file_patch');
        $file_patch = "./uploads/";
        $nbdir = $_GET['nbdir'].'/';
        //根目录路径，可以指定绝对路径，比如 /var/www/attached/
        $root_path = $file_patch . $nbdir;
        //var_dump($root_path);
        //根目录URL，可以指定绝对路径，比如 http://www.yoursite.com/attached/
        $root_url = '/uploads/'.$nbdir;
        //图片扩展名
        $ext_arr = array('gif', 'jpg', 'jpeg', 'png', 'bmp');
        //目录名
        $dir_name='';
        //$dir_name = empty($_GET['dir']) ? '' : trim($_GET['dir']);
        if (!in_array($dir_name, array('', 'image', 'flash', 'media', 'file'))) {
            echo "Invalid Directory name.";
            exit;
        }
        if ($dir_name !== '') {
            $root_path .= $dir_name . "/";
            $root_url .= $dir_name . "/";
            if (!file_exists($root_path)) {
                mkdir($root_path);
            }
        }
        //根据path参数，设置各路径和URL
        if (empty($_GET['path'])) {
            $current_path = realpath($root_path) . '/';
            $current_url = $root_url;
            $current_dir_path = '';
            $moveup_dir_path = '';
        } else {
            $current_path = realpath($root_path) . '/' . $_GET['path'];
            $current_url = $root_url . $_GET['path'];
            $current_dir_path = $_GET['path'];
            $moveup_dir_path = preg_replace('/(.*?)[^\/]+\/$/', '$1', $current_dir_path);
        }

        //排序形式，name or size or type
        $order = empty($_GET['order']) ? 'name' : strtolower($_GET['order']);

        //不允许使用..移动到上一级目录
        if (preg_match('/\.\./', $current_path)) {
            echo 'Access is not allowed.';
            exit;
        }
        //最后一个字符不是/
        if (!preg_match('/\/$/', $current_path)) {
            echo 'Parameter is not valid.';
            exit;
        }
        //目录不存在或不是目录
        if (!file_exists($current_path) || !is_dir($current_path)) {
            echo 'Directory does not exist.';
            exit;
        }

        //遍历目录取得文件信息
        $file_list = array();
        if ($handle = opendir($current_path)) {
            $i = 0;
            while (false !== ($filename = readdir($handle))) {
                if ($filename{0} == '.') continue;
                $file = $current_path . $filename;
                if (is_dir($file)) {
                    $file_list[$i]['is_dir'] = true; //是否文件夹
                    $file_list[$i]['has_file'] = (count(scandir($file)) > 2); //文件夹是否包含文件
                    $file_list[$i]['filesize'] = 0; //文件大小
                    $file_list[$i]['is_photo'] = false; //是否图片
                    $file_list[$i]['filetype'] = ''; //文件类别，用扩展名判断
                } else {
                    $file_ext = strtolower(pathinfo($file, PATHINFO_EXTENSION));
                    if (!in_array($file_ext, $ext_arr)) {
                        continue;
                    }
                    $file_list[$i]['is_dir'] = false;
                    $file_list[$i]['has_file'] = false;
                    $file_list[$i]['filesize'] = filesize($file);
                    $file_list[$i]['dir_path'] = '';
                    $file_list[$i]['is_photo'] = in_array($file_ext, $ext_arr);
                    $file_list[$i]['filetype'] = $file_ext;
                }
                $file_list[$i]['filename'] = $filename; //文件名，包含扩展名
                $file_list[$i]['datetime'] = date('Y-m-d H:i:s', filemtime($file)); //文件最后修改时间
                $i++;
            }
            closedir($handle);
        }

        //排序
        function cmp_func($a, $b) {
            global $order;
            if ($a['is_dir'] && !$b['is_dir']) {
                return -1;
            } else if (!$a['is_dir'] && $b['is_dir']) {
                return 1;
            } else {
                if ($order == 'size') {
                    if ($a['filesize'] > $b['filesize']) {
                        return 1;
                    } else if ($a['filesize'] < $b['filesize']) {
                        return -1;
                    } else {
                        return 0;
                    }
                } else if ($order == 'type') {
                    return strcmp($a['filetype'], $b['filetype']);
                } else {
                    return strcmp($a['filename'], $b['filename']);
                }
            }
        }
        usort($file_list, __NAMESPACE__.'\cmp_func');

        $result = array();
        //相对于根目录的上一级目录
        $result['moveup_dir_path'] = $moveup_dir_path;
        //相对于根目录的当前目录
        $result['current_dir_path'] = $current_dir_path;
        //当前目录的URL
        $result['current_url'] = $current_url;
        //文件数
        $result['total_count'] = count($file_list);
        //文件列表数组
        $result['file_list'] = $file_list;
        //输出JSON字符串
        return $this->json_res($result);
    }

    private function json_res($json_data){
        header('Content-type: text/html; charset=UTF-8');
        return new Response( json_encode($json_data) );
    }
}